package com.gxa.hualianeshop.common.handler;

import com.gxa.hualianeshop.common.base.R;
import com.gxa.hualianeshop.common.base.ResultCode;
import com.gxa.hualianeshop.common.exception.BizException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author bill
 * @date 2022/5/31 11:47
 */

@RestController
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {


   /*
   根据异常类型,选择不同的方法,ExceptionHandler的属性value
   @handler(Exception.class)
    public Map exceptionHandler(){

    }*/

    /**
     * 也可以选择将所有异常集中处理
     * 异常的信息是通过声明参数的形式,让SpringMVC自动注入
     * @param e
     * @return
     */
    @ExceptionHandler(Throwable.class)
    public R exceptionHandler(Exception e){

        if(e instanceof BizException){
            BizException be = ((BizException)e);
           return R.failed(be.getExceptionCode().getMessage());

        }else{
            // 记录日志
            log.error(e.toString());
           return R.failed(ResultCode.RUNTIME_EXCEPTION.getMessage());
        }
    }
}
